#!/usr/bin/perl

#-------------------------------------------------------------------------------
# Solicitar al usuario una fecha (dd:mm:aaaa) y comprobar si es correcta.
# Para que una fecha sea correcta es necesario:

# · El año debe ser mayor que cero.
# · El mes debe estar entre 1 y 12.
# · Dependiendo del mes que sea, el día debe estar dentro de los límites
#   válidos.
# · Los meses que tienen 31 días son 1, 3, 5, 7, 8, 10 y 12.
# · Los meses de 30 días son 4, 6, 9 y 11.
# · El mes de 28 días es 2, excepto en un año bisiesto que es 29 días.
#-------------------------------------------------------------------------------

#Limpiamos la pantalla
print `clear`;

#Definicion de variables
#Definimos las variables falsas
my $D=0;
my $M=0;
my $A=0;

#Mensaje de Bienvenida
print "\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n";
print "\t\tBienvenidos\n";
print "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n";

#Descripcion del programa
print "PROGRAMA QUE INDICA SI UNA FECHA ES CORRECTA O NO\n\n";

#Solicitamos el ingreso de la fecha por teclado
print "Introduzca la fecha (dd/mm/aaaa): ";
chomp($fecha=<STDIN>);

#Separamos la cadena introducida en varios elementos con split
#Y los guardamos en sus respectivas variables
($d, $m, $a)=split('/', $fecha);

#Verificamos el valor de cada variable
#print "\n\n$dia / $mes / $ano";

#Empezamos a hacer las comprobaciones

#Comprobamos el año
if($a>0){
	#Año Correcto
	$A=1;
	#Comprobamos si es bisiesto
	if(($a%4==0 && $a%100!=0) || $a%400==0){
		#Año Bisiesto
		$bis=1;
	}
	else{
		#Año Normal
		$bis=0;
	}
}
else{
	#Año Incorrecto
	$A=0;
};

#Comprobamos el mes
if($m>=1 && $m<=12){
	#Mes correcto
	$M=1;
	#Establecemos los dias maximos por mes
	if(($m==4 || $m==6) || ($m==9 || $m==11)){
		#Abril, Junio, Septiembre y Noviembre tienen 30 dias
		$dmax=30;
	}
	elsif($m==2){
		#En el mes de Febrero verificamos si el año es bisiesto o no
		if($bis==1){
			#Si es Bisiesto tiene 29 dias
			$dmax=29;
		}
		else{
			#Si no es Bisiesto tiene 28 dias
			$dmax=28;
		}
	}
	else{
		#El resto de meses tienen 31 dias
		$dmax=31;
	}
}
else{
	#Mes Incorrecto
	$M=0;
}

#Comprobamos el dia
if($d>=1 && $d<=31){
	#Dia dentro del rango general
	#Ahora verificamos que el dia este dentro del rango del mes introducido
	if($d<=$dmax){
		#Dia Correcto
		$D=1;
	}
}
else{
	#Dia Incorrecto
	$D=0;
}

#Verificamos finalmente que el dia, el mes y el año sean correctos
if($D==1 && ($M==1 && $A==1)){
	#Fecha Correcta!
	MensajeCorrecta();
}
else{
	#Fecha Incorrecta
	MensajeError();
}

#Mensaje de despedida
print "\n\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n";
print "\t\t  Adios!!\n";
print "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n"; 

sub MensajeError{
	print "\n==-----==FECHA INCORRECTA==-----==";
}

sub MensajeCorrecta{
	print "\n==-----==FECHA CORRECTA==-----==";
}